#ifndef XMLHELPER_H
#define XMLHELPER_H

#include "./tinyxml2/tinyxml2.h"
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>

class XmlHelper {
public:
    XmlHelper();
    ~XmlHelper() = default;

    // 加载XML文件
    bool loadFile(const std::string& filename);

    // 保存XML文件
    bool saveFile(const std::string& filename = "");

    // 读取节点值，如果不存在则创建
    template<typename T>
    T read(const std::string& path, const T& defaultValue);

    // 写入节点值
    template<typename T>
    bool write(const std::string& path, const T& value);

    // 检查路径是否存在
    bool exists(const std::string& path);

    // 获取XML字符串
    std::string toString();

    // 删除节点
    bool remove(const std::string& path);

    void debugPrintDocument();

private:
    // 确保路径存在，如果不存在则创建
    tinyxml2::XMLElement* ensurePathExists(const std::string& path);

    // 分割路径
    std::vector<std::string> splitPath(const std::string& path);

    // 字符串转换工具
    template<typename T>
    T fromString(const std::string& str);

    template<typename T>
    std::string toString(const T& value);

private:
    tinyxml2::XMLDocument m_doc;
    std::string m_filename;
    tinyxml2::XMLElement* m_root;
};

#endif // XMLHELPER_H
